﻿/**
 * Funciones javascript para el manejo del dialogo de apartado
 * @author Ricardo Santillan Reyes
 * @copyright Yahoo! Inc. 2008
 * @copyright Instituto Tecnologico de Jiquilpan 2008-2009
 * @license Creative Commons 2.5
 */

YAHOO.namespace("contenedor");

var mensajeDialogo = function(pTitulo, pMensaje, pTipo) {
	//Mostramos el dialogo de mensajes
	YAHOO.contenedor.dlgMensajes.setHeader(pTitulo);
	YAHOO.contenedor.dlgMensajes.setBody(pMensaje);
	/*
	 * @var int Tipo de mensaje (YAHOO SimpleDialog Icons) 
	 * 0 - Bloqueado
	 * 1 - Advertencia
	 * 2 - Ayuda
	 * 3 - Informacion
	 * 4 - Alarma
	 * 5 - Sugerencia 
	 */
	switch (pTipo) {
		case 0 :
			YAHOO.contenedor.dlgMensajes.cfg.setProperty("icon",
					YAHOO.widget.SimpleDialog.ICON_BLOCK);
			break;
		case 1 :
			YAHOO.contenedor.dlgMensajes.cfg.setProperty("icon",
					YAHOO.widget.SimpleDialog.ICON_WARN);
			break;
		case 2 :
			YAHOO.contenedor.dlgMensajes.cfg.setProperty("icon",
					YAHOO.widget.SimpleDialog.ICON_HELP);
			break;
		case 3 :
			YAHOO.contenedor.dlgMensajes.cfg.setProperty("icon",
					YAHOO.widget.SimpleDialog.ICON_INFO);
			break;
		case 4 :
			YAHOO.contenedor.dlgMensajes.cfg.setProperty("icon",
					YAHOO.widget.SimpleDialog.ICON_ALARM);
			break;
		case 5 :
			YAHOO.contenedor.dlgMensajes.cfg.setProperty("icon",
					YAHOO.widget.SimpleDialog.ICON_TIP);
			break;
	}
	if (YAHOO.contenedor.dlgMensajes.render(document.body))
		YAHOO.contenedor.dlgMensajes.show();
	else
		alert(pMensaje);
};

var recargaOnAceptar;

//Tooltips
var getIdsTd = function() {
	var ids = [];
	var semana = YAHOO.util.Dom.get("principal");
	var hijos = semana.childNodes;
	for (var i = 0; i < hijos.length; i++) {
		var hijo = hijos.item(i);
		arrId = hijo.id.split('-');
		if (arrId.length == 3) //row-1-1 (row - fila - columna)
			ids.push(hijo.id);
	}
	return ids;
};

//Siguiente semana
function getSemana(p) {

	mensaje('Obteniendo semana...', _MENSAJE_INFORMACION);

	var asynSigSema = function(pParam) {
		var res = pParam.responseText;
		var tabla;
		//BUGTRACE Parse 1
		try{
			tabla = JSON.parse(res);
		}catch(e){
			bugtrace('equipo|parse1');
			return;
		}
		//BUGTRACE Null 1
		if(tabla == null){
			bugtrace('equipo|null1');
			return;
		}
		
		var fecha = tabla.fechaEncabezado;
		/* Puede venir un dialogo de mensaje */
		if (tabla.tipoDialogo != null) {
			if (parseInt(tabla.tipoDialogo) == 1) {
				/*
				 * Objeto del tipo mensajes
				 * @property titulo Titulo del mensaje
				 * @property contenido Contenido o cuerpo del mensaje
				 * @property tipo Tipo de mensaje (Iconos de Yahoo! SimpleDialog)
				 */
				limpiarMensaje();
				recargaOnAceptar = true;
				mensajeDialogo(tabla.titulo, tabla.contenido, tabla.tipo);
				return;
			}
		}

		mensaje('Actualizando informaci&oacute;n...', _MENSAJE_INFORMACION);

		for (columna = 0; columna < tabla.encabezados.length; columna++) {
			enc = document.getElementById(tabla.encabezados[columna].id);
			enc = replaceHtml(enc, tabla.encabezados[columna].contenido);
			enc.className = tabla.encabezados[columna].clase;
			for (fila = 0; fila < tabla.celdas.length; fila++) {
				fi = document.getElementById(tabla.celdas[fila][columna].id);
				fi = replaceHtml(fi, tabla.celdas[fila][columna].contenido);
				fi.className = tabla.celdas[fila][columna].clase;
				
				if(fi.className == 'diapasado'){
					fi.onmouseover = "document.body.style.cursor='help'";//tabla.celdas[fila][columna].clase + "IE";
					fi.onmouseout = "document.body.style.cursor='default';";//tabla.celdas[fila][columna].clase;
				}else{
					fi.onmouseover = 'className=\'' + tabla.celdas[fila][columna].clase + "IE'; document.body.style.cursor='pointer'";//tabla.celdas[fila][columna].clase + "IE";
					fi.onmouseout = 'className=\'' + tabla.celdas[fila][columna].clase + "'; document.body.style.cursor='default';";
				}
				fi.title = tabla.celdas[fila][columna].titulo;
			}
		}

		replaceHtml('fechaEnc', fecha);

		var args = {timeout: true};
		mensaje('Semana cargada.', _MENSAJE_INFORMACION,args);
	};

	var asynSigFallo = function(pParam) {
		mensaje('Fall&oacute; el env&iacute;o de informaci&oacute;n.',
				_MENSAJE_ERROR);
	};

	var asynSigSemana = {
		success : asynSigSema,
		failure : asynSigFallo,
		argument : {
			sec : "equipo",
			modo : "asincrono",
			get : "semana",
			opc : "siguiente"
		}
	};

	if (p == 2) {
		url = "index.php?sec=equipo&modo=asincrono&get=semana&opc=siguiente";
		YAHOO.contenedor.semanaNumero = p;
	} else if (p == 1) {
		url = "index.php?sec=equipo&modo=asincrono&get=semana";
		YAHOO.contenedor.semanaNumero = p;
	}

	var peticion = YAHOO.util.Connect.asyncRequest('GET', url, asynSigSemana);
	if (!peticion)
		alert("No se pudo cargar informacion de la base de datos");
}

function init() {

	YAHOO.contenedor.semanaNumero = 1;

	//Tooltips

	var grupoTooltips = getIdsTd;
	var tooltips = new YAHOO.widget.Tooltip("tooltips", {
				context : grupoTooltips
			});

	//Dialogo de error
	var manejaAceptar = function() {
		this.hide();
		if (recargaOnAceptar) {
			mensaje('Recargando p&aacute;gina...', _MENSAJE_INFORMACION);
			location.reload();
		}
	};

	recargaOnAceptar = false;
	YAHOO.contenedor.dlgMensajes = new YAHOO.widget.SimpleDialog("dlgMensajes", {
		width : "300px",
		fixedcenter : true,
		visible : false,
		draggable : false,
		close : true,
		modal : true,
		constraintoviewport : true,
		buttons : [{
			text : "Aceptar",
			handler : manejaAceptar,
			isDefault : true
			}]
	});
	YAHOO.contenedor.dlgMensajes.setHeader("Un error ha ocurrido");

	//Eventos del dialogo
	var eventEnviar = function() {
		mensaje("Enviando informaci&oacute;n...", _MENSAJE_INFORMACION);
		this.submit();
	};
	var eventCancelar = function() {
		limpiarMensaje();
		//Limpiamos los comentarios
		document.getElementById('txtComentarios').value = '';
		this.cancel();
	};
	//Eventos de respuesta asincrona
	var responseCorrecto = function(p) {
		var res = p.responseText;
		var tabla;
		//BUGTRACE Parse 2
		try{
			tabla = JSON.parse(res);
		}catch(e){
			bugtrace('equipo|parse2');
		}
		//BUGTRACE Null 2
		if(tabla == null){
			bugtrace('equipo|null2');
			return;
		}
		
		/* Puede venir un dialogo de mensaje */
		if (tabla.tipoDialogo != null) {
			if (parseInt(tabla.tipoDialogo) == 1) {
				/*
				 * Objeto del tipo mensajes
				 * @property titulo Titulo del mensaje
				 * @property contenido Contenido o cuerpo del mensaje
				 * @property tipo Tipo de mensaje (Iconos de Yahoo! SimpleDialog)
				 */
				limpiarMensaje();
				recargaOnAceptar = true;
				mensajeDialogo(tabla.titulo, tabla.contenido, tabla.tipo);
				return;
			}
		}

		mensaje('Actualizando informaci&oacute;n...', _MENSAJE_INFORMACION);

		for (columna = 0; columna < tabla.encabezados.length; columna++) {
			enc = document.getElementById(tabla.encabezados[columna].id);
			enc = replaceHtml(enc, tabla.encabezados[columna].contenido);
			enc.className = tabla.encabezados[columna].clase;
			for (fila = 0; fila < tabla.celdas.length; fila++) {
				fi = document.getElementById(tabla.celdas[fila][columna].id);
				fi = replaceHtml(fi, tabla.celdas[fila][columna].contenido);
				fi.className = tabla.celdas[fila][columna].clase;
				fi.onmouseover = tabla.celdas[fila][columna].clase + "IE";
				fi.onmouseout = tabla.celdas[fila][columna].clase;
				fi.title = tabla.celdas[fila][columna].titulo;
			}
		}

		encabezado = document.getElementById('fechaEnc');
		encabezado = replaceHtml(encabezado, tabla.fechaEncabezado);

		limpiarMensaje();
		var args = {timeout: true};
		if (tabla.registro)
			mensaje('Equipo apartado correctamente.', _MENSAJE_INFORMACION,args);
		else
			mensaje('No se ha apartado el equipo.', _MENSAJE_ERROR);
	};
	var responseFallo = function(pParam) {
		alert('Falló el envío de información: ' + pParam.status);
		mensaje('Fall&oacute; el env&iacute;o de informaci&oacute;n', _MENSAJE_ERROR);
	};
	//Creamos el dialogo
	YAHOO.contenedor.dlgApartado = new YAHOO.widget.Dialog("dialogo", {
		width : "30em",
		fixedcenter : true,
		visible : false,
		constraintoviewport : true,
		modal : true,
		buttons : [{
					text : "Registrar",
					handler : eventEnviar,
					isDefault : true
				},

				{
					text : "Cancelar",
					handler : eventCancelar
				}]
	});
	//Validacion de datos
	YAHOO.contenedor.dlgApartado.validate = function(pParam) {
		var data = this.getData();
		if (data.fcboMateria == "" || data.fcoAula == "") {
			alert("Escribe tu clave y selecciona una materia.");
			return false;
		} else {
			return true;
		}
	};
	//Establecemos los eventos de respuesta del dialogo
	YAHOO.contenedor.dlgApartado.callback = {
		success : responseCorrecto,
		failure : responseFallo
	};
	
	//Precargamos las imagenes
	imgAnterior = new Image();
	imgSiguiente = new Image();
	imgAnterior.src = 'modulos/mod_equipo/anterior.png';
	imgSiguiente.src = 'modulos/mod_equipo/siguiente.png';
}
//Peticion asincrona via get del dialogo
//Mostrar el dialogo
var showDialogo = function() {
	//Mostramos el dialogo
	limpiarMensaje();
	if (YAHOO.contenedor.dlgApartado.render())
		YAHOO.contenedor.dlgApartado.show();
	else
		alert("No se pudo crear el dialogo\n\nError de renderizado.");
};
var asynCorrecto = function(pParam) {
	var respuesta = pParam.responseText;
	var dialogo;
	//BUGTRACE Parse 3 
	try{
		dialogo = JSON.parse(respuesta);
	}catch(e){
		bugtrace('equipo|parse3');
	}
	//BUGTRACE Null 3
	if(dialogo == null){
		bugtrace('equipo|null3');
	}
	
	/*
	 * Pueden venir tres tipos diferentes de dialogo
	 * 0 - Dialogo semana
	 * 1 - Dialogo mensajes
	 * 2 - Dialogo informacion
	 */

	//Dialogo de semana
	if (dialogo.tipoDialogo == 0) {
		/*
		 * Objeto del tipo dialogo
		 * @property action Accion del formulario
		 * @property equipo[] Equipo
		 * @property isAlumno Es alumno o docente?
		 */

		var form = document.getElementById('frmApartadoEquipo');
		var equipo = document.getElementById('cboEquipo');
		var iFecha = document.getElementById('fecha');
		var iHora = document.getElementById('hora');
		
		//Agregamos el equipo
		while (equipo.firstChild)
			equipo.removeChild(equipo.firstChild);

		for (i = 0; i < dialogo.equipo.length; i++) {
			var optEqu = document.createElement('option');
			optEqu.value = dialogo.id_equipo[i];
			equipo.appendChild(optEqu);
			optEqu = replaceHtml(optEqu, dialogo.equipo[i]);
		}

		//Fecha y hora del apartado
		iFecha.value = dialogo.fecha;
		iHora.value = dialogo.hora + ':00';

		//Fechas en el encabezado
		var encabezado = document.getElementById('encabezado');
		encabezado = replaceHtml(encabezado, dialogo.fechaLarga + " a las "
						+ dialogo.hora + " hrs.");

		form.action = dialogo.action;
		//Esperamos a que el DOM este listo
		YAHOO.util.Event.onDOMReady(showDialogo);
	} else
	//Dialogo mensajes 
	if (dialogo.tipoDialogo == 1){
		/*
		 * Objeto del tipo mensajes
		 * @property titulo Titulo del mensaje
		 * @property contenido Contenido o cuerpo del mensaje
		 * @property tipo Tipo de mensaje (Iconos de Yahoo! SimpleDialog)
		 */
		limpiarMensaje();
		mensajeDialogo(dialogo.titulo, dialogo.contenido, dialogo.tipo);
		return;
	}
};

var asynFallo = function(pParam) {
	if (pParam.responseText !== undefined) {
		//Error
		//alert("Error al tratar de obtener datos del servidor.\n\nPeticion asincrona del dialogo");
		mensaje("Error al tratar de obtener datos del servidor (Petici&oacute;n asincrona del dialogo).",
				_MENSAJE_ERROR);
	}
};

var asynLlamada = {
	success : asynCorrecto,
	failure : asynFallo,
	argument : {
		sec : "equipo",
		modo : "asincrono",
		get : "dialogo",
		columna : 0,
		hora : 7
	}
};

// Eventos de la capa semana
var clickSemana = function(pObjeto) {
	var elObjeto = YAHOO.util.Event.getTarget(pObjeto);
	// Url de peticion al servidor
	var sUrl = "index.php?sec=equipo&modo=asincrono&get=dialogo";
	while (elObjeto.id != "semana") {
		// Es una celda
		if (elObjeto.nodeName.toLowerCase() == "td") {
			// Separamos el id de la celda con el caracter '-'
			arrId = elObjeto.id.split('-');
			if (arrId.length == 3) { // row-1-1 (row - fila - columna)
				var fila = parseInt(arrId[1]);
				var columna = parseInt(arrId[2]);
				// Dia de la semana de acuerdo a la columna
				switch (columna) {
				case 0:
					sDia = "Lunes";
					break;
				case 1:
					sDia = "Martes";
					break;
				case 2:
					sDia = "Miercoles";
					break;
				case 3:
					sDia = "Jueves";
					break;
				case 4:
					sDia = "Viernes";
					break;
				case 5:
					sDia = "Sabado";
					break;
				}
				// La hora es el numero de renglon mas 7
				var hora = (fila + 7);
				sUrl += "&columna=" + columna + "&hora=" + hora;

				// Es la siguiente semana?
				if (YAHOO.contenedor.semanaNumero == 2)
					sUrl += "&opc=siguiente";

				// Realizamos la peticion
				mensaje('Equipos disponibles...', _MENSAJE_INFORMACION);
				var peticion = YAHOO.util.Connect.asyncRequest('GET', sUrl,
						asynLlamada);
				if (!peticion)
					alert("No se pudo cargar informacion de la base de datos");
				break;
			}// if arr.length = 3
		}/*
			 * else {//If celda //Clic en una columna arrId =
			 * elObjeto.id.split('-'); if (elObjeto.nodeName.toLowerCase() ==
			 * "th") { if (arrId.length == 2) { //col-1 (row - columna)
			 * mensaje('Cargando d&iacute;a...', _MENSAJE_INFORMACION); //Es la
			 * siguiente semana? if (YAHOO.contenedor.semanaNumero == 2) url =
			 * 'index.php?sec=dia&dia=' + arrId[1] + '&opc=siguiente'; else url =
			 * 'index.php?sec=dia&dia=' + arrId[1]; //FIXME Problemas con el
			 * redireccionamiento de window.location? window.location = url; } }
			 * //No es la capa semana, pero tampoco una celda; seguimos buscando
			 * elObjeto = elObjeto.parentNode; }
			 */
		elObjeto = elObjeto.parentNode;
	} // While
}; // Click principal

//Registramos el evento click en la capa semana
YAHOO.util.Event.on("semana", "click", clickSemana);
//Esperamos a que se cargue el modelo de la pagina para cargar el dialogo
YAHOO.util.Event.onDOMReady(init);
